/**
 * @description 判断一个值是否是日期类型
 * @param {String} value
 * Object.prototype.toString.call(value)=="[object String]"判断是否是字符串
 * typeof(str)=='string'
 * Object.prototype.toString.call(value)=="[object Date]"判断是否是日期
 * value instanceof Date
 */
function isDate(value) {
	if (value instanceof Date) {
		return true
	};
	if (typeof(value) != 'string') {
		return false
	}; //保证是字符串
	return isNaN(value) && !isNaN(Date.parse(value)); //isNaN(value)排除value为纯数字的情况
};
/**
 * @description 给定一个yyyy-MM-DD hh:mm:ss格式的字符串 返回一个Date
 * @param {String} strDate 
 * @return {Date}
 */
function getDate(strDate) {
	var st = strDate;
	var a = st.split(" ");
	var b = a[0].split("-");
	var c = a[1].split(":");
	var date = new Date(b[0], b[1], b[2], c[0], c[1], c[2]);
	return date;
};
/**
 * 将字符串解析成日期
 * @param str 输入的日期字符串，如'2014-09-13'
 * @param fmt 字符串格式，默认'yyyy-MM-dd'，支持如下：y、M、d、H、m、s、S，不支持w和q
 * @returns 解析后的Date类型日期
 */
function parseDate(str, fmt) {
	fmt = fmt || 'yyyy-MM-dd';
	var obj = {y: 0, M: 1, d: 0, H: 0, h: 0, m: 0, s: 0, S: 0};
	fmt.replace(/([^yMdHmsS]*?)(([yMdHmsS])\3*)([^yMdHmsS]*?)/g, function(m, $1, $2, $3, $4, idx, old) {
		str = str.replace(new RegExp($1+'(\\d{'+$2.length+'})'+$4), function(_m, _$1) {
			obj[$3] = parseInt(_$1);
			return '';
		});
		return '';
	});
	obj.M--; // 月份是从0开始的，所以要减去1
	var date = new Date(obj.y, obj.M, obj.d, obj.H, obj.m, obj.s);
	if(obj.S !== 0) date.setMilliseconds(obj.S); // 如果设置了毫秒
	return date;
}
/**
 * @description 日期格式化
 * @param {Date} date 
 * @param {String} fmt
 */
function dateFormat(date, fmt) {
    var obj = {
        "M+": date.getMonth() + 1,                      // 月
        "d+": date.getDate(),                           // 日
        "h+": date.getHours(),                          // 时
        "m+": date.getMinutes(),                        // 分
        "s+": date.getSeconds(),                        // 秒
        "q+": Math.floor((date.getMonth() + 3) / 3),    // 季度
        "S": date.getMilliseconds()                     // 毫秒
    };
    if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
    }
    for (var i in obj) {
        if (new RegExp("(" + i + ")").test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (obj[i]) : (("00" + obj[i]).substr(("" + obj[i]).length)));
        }
    }
    return fmt;
}
/**
 * 时间加减法 返回 str 格式 2019-4-10
 */
function addDate(date, days) {
	var d = new Date(date);
	d.setDate(d.getDate() + days);
	var m = d.getMonth() + 1;
	if (m < 10) {
		m = "0" + m;
	}
	var day = d.getDate();
	if (day < 10) {
		day = '0' + day;
	}
	return d.getFullYear() + '-' + m + '-' + day;
}

/**
 * 时间加减法, 返回数组格式 [2019,03,15]
 */
function addDates(date, days) {
	var d = new Date(date);
	var arr = [];
	d.setDate(d.getDate() + days);
	var m = d.getMonth();
	var day = d.getDate();
	if (day < 10) {
		day = '0' + day;
	}
	arr.push(d.getFullYear());
	arr.push(m);
	arr.push(day);
	return arr;
}

/**
 * 傳入 分钟数, 得到具体时间
 */
function addMinutes(min) {
	var d = new Date();
	d.setMinutes(d.getMinutes() + parseInt(min));
	return d;
}
/**
 * 计算 日期相差天数
 */
function datedifference(sDate1, sDate2) { //sDate1和sDate2是2006-12-18格式
	var dateSpan,
		tempDate,
		iDays;
	sDate1 = Date.parse(sDate1);
	sDate2 = Date.parse(sDate2);
	dateSpan = sDate2 - sDate1;
	dateSpan = Math.abs(dateSpan);
	iDays = Math.floor(dateSpan / (24 * 3600 * 1000));
	return iDays
};

/**
 * 通用日期加减
 * @author ckk
 * @param dateStr
 * @param type 加减数的类型，d是天、h是小时...
 * @param num 正数加，负数减。ps：支持非整数
 * @returns {Date}
 */
function addDay(dateStr, type, num) {
    var m = 86400000;// 默认是天
    if(type == 'h'){
        m = m / 24;
    }else if(type == 'm'){
        m = m / 24 / 60;
    }else if(type == 's'){
        m = m / 24 / 60 / 60;
    }else if(type == 'ms'){
        m = m / 24 / 60 / 60 / 1000;
    }else{
        // type == 'd'
        // m = m;
    }
    return new Date(Date.parse(dateStr) + (m * num));
}
export default {
	isDate,
	dateFormat,
	parseDate,
	getDate
}
/*
 * Date常用API -------------------
 * let middleDate=new Date(1594352983166);//时间戳转时间
 * let date = new Date("2011-03-14 09:20:20");//日期转时间
 * moment.js ---------------------
 * 项目官网：http://momentjs.com/
 * 
 * 安装：
 * npm install moment  或者  yarn add moment
 * npm install moment --save-dev
 * npm install moment --save
 * npm i moment
 * 
 * 引入：
 * // require 方式
 * const moment = require('moment');
 * // import 方式
 * import moment from 'moment'; 
 * 
 * 使用：
 * let aDate=this.$moment('2020-02-02 20:20:20','YYYY-MM-DD HH:mm:ss')  //创建moment对象
 * console.log(newsDate)  //打印结果见下图

 * 获取当前时间
 * let raw_time=moment()
 * 获取当前时间,并格式化形式为 2020-12-12，这种形式
 * let now=moment().format('YYYY-MM-DD HH:mm:ss')
 * let bDate = this.$moment(aDate._d).format('YYYY-MM-DD HH:mm:ss')
 * console.log(bDate)  //打印出2020-02-02 20:20:20

 * 获取输入的日期与今天 的差值。两个日期相差几天
 * let diff = moment().diff(moment()，'days')

 * 判断日期是否小于今天的日期
 * let value = moment('2016-01-01'); 
 * let t= moment()>moment(value)
 
 * 当前年：
 * moment().year(); // Number
 
 * 当前月：
 * moment().format('MM')
 * moment(this.stime).format('MM')// 获取月份

 * 获取日期
 * moment(this.stime).format('DD')) 
 
 * 当前季度：
 * moment().quarter()
 
 * 获取本日截止时间：
 * moment().startOf('day').format("YYYY-MM-DD HH:mm:ss") 
 * moment().endOf('day').format("YYYY-MM-DD HH:mm:ss") 
 
 * 上一年/下一年：
 * 上一年：moment().add(-1, 'y').format("YYYY")
 * 下一年：moment().add(1, 'y').format("YYYY")
 * 上几年和下几年同理，做momment日期加减，月季度亦同理
 
 * 上一季度/下一季度：
 * 上一季度：moment().add(-1, 'Q').quarter()
 * 下一季度：moment().add(1, 'Q').quarter()
 
 * 年开始结束时间：
 * moment().startOf('year')
 * moment().endOf('year')
 
 * 当前季度的开始结束时间：
 * moment().startOf('quarter').format("YYYY-MM-DD")
 * moment().endOf('quarter').format("YYYY-MM-DD")
 
 * 指定年指定季度的开始结束时间：（某年某季度的开始结束时间）
 * moment(moment().format("YYYY-02-01")).startOf('quarter').format("YYYY-MM-DD")
 * moment(moment().format("YYYY-02-01")).endOf('quarter').format("YYYY-MM-DD")
 
 * 月度开始结束时间
 * moment().startOf('month')
 * moment().endOf('month')
 
 * 昨天： moment().subtract(1, 'days')
 * 明天： moment().add(1, 'days')
 
 * 前一个月： moment().subtract(1, 'months')
 * 后一个月： moment().add(1, 'months')
 
 * 今天是星期几：moment().format('d');
 * 1
 
 * Unix时间戳：moment().format('X');
 * 1421665871
 
 * 相对时间：
 * moment("20130101", "YYYYMMDD").fromNow();
 * 2 years ago
 * moment("20151010", "YYYYMMDD").fromNow();
 * in 9 months
 
 * 日期加法add，并格式化
 * let addtime = moment().add(1, 'd').format('YYYY-MM-DD'),
 * 说明：'d'：天（=day）。还可以是'week'：周，'hours':小时，'months':月，等等..............
 * 7天后的日期：moment().add('days',7).format('YYYY年MM月DD日');
 * 2015年01月26日
 * 9小时后：moment().add('hours',9).format('HH:mm:ss');
 * 04:11:11
 * 明天moment().add(1, 'days').calendar();
 * Tomorrow at 7:11 PM
*/